package secondStage.part3.泛型;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName: [GenericDemo4]
 * @Description: 类型通配符
 * @Author: [黄劲松]
 * @CreateDate: [2021-04-03]
 * @Version: [v1.0]
 */
/*4.5类型通配符
为了表示各种泛型List的父类，可以使用类型通配符
    类型通配符:<?>
    List<?>:表示元素类型未知的List，它的元素可以匹配任何的类型
    这种带通配符的List仅表示它是各种泛型List的父类，并不能把元素添加到其中

如果说我们不希望List<?>是任何泛型List的父类，只希望它代表某一类泛型List的父类，可以使用类型通配符的上限
    类型通配符上限:<? extends类型>
    List<? extends Number>:它表示的类型是Number或者其子类型

除了可以指定类型通配符的上限，我们也可以指定类型通配符的下限
    类型通配符下限:<?super类型>
    List<? super Number> :它表示的类型是Number或者其父类型*/
public class GenericDemo4 {
    public static void main(String[] args) {
        //类型通配符:<?>
        List<?> list = new ArrayList<Object>();
        List<?> list1 = new ArrayList<Number>();
        List<?> list2 = new ArrayList<Integer>();
        System.out.println("----------");
        //类型通配符上限:<? extends类型>
//        List<?extends Number> list3 = new ArrayList<Object>();
        List<? extends Number> list4 = new ArrayList<Number>();
        List<? extends Number> list5 = new ArrayList<Integer>();
        //类型通配符下限:<?super类型>
        List<? super Number> list6 = new ArrayList<Object>();
        List<? super Number> list7 = new ArrayList<Number>();
//        List<?super Number> list8 = new ArrayList<Integer>();

    }
}
